package com.sinosoft.suggest.model;

import java.util.ArrayList;
import java.util.List;

import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;

/**
 * 
 * @author sino-zjl
 * @code  multi adapter for listView
 */

abstract public class InsurancePlanMultiAdapter extends BaseAdapter{
	
	abstract protected View getHeaderView(String caption,int index,View convertView,ViewGroup parent);   
	   
	private List<Section> sections=new ArrayList<Section>();   
	private static int FLAG_SECTION_HEADER=0;   

	public InsurancePlanMultiAdapter() {   
	    super();   
	}   
	
	//add section(header + adapter)
	public void addSection(String header, Adapter adapter) {   
	    sections.add(new Section(header, adapter));   
	}   

	public Object getItem(int position) {   
	    for (Section section : this.sections){   
	        if (position==0){   
	            return section;   
	        }
	        //size : each section's size  which includes header
	        int size=section.adapter.getCount()+1;   
	        if (position<size){   
	            return section.adapter.getItem(position-1);   
	        }   
	        position = position - size;   
	    }     
	    return null;   
	}   
	
	public int getCount() { 
		//total : all section data size,includes all headers
	    int total=0;   
	    for (Section section : this.sections) {   
	    	// add one for header  
	        total +=section.adapter.getCount()+1;  
	    }      
	    return total;   
	}   

	public int getViewTypeCount() {   
	    int total=1;    
	    // one for the header, plus those from sections  
	    for (Section section : this.sections) {   
	        total +=section.adapter.getViewTypeCount();   
	    }     
	    return total;   
	}   

	public int getItemViewType(int position) {   
		// start counting from here  
	    int typeOffset=FLAG_SECTION_HEADER+1;    
	    for (Section section : this.sections) {   
	        if (position==0) {   
	            return FLAG_SECTION_HEADER;   
	        }      
	        int size=section.adapter.getCount()+1;   
	        if (position<size) {   
	            return typeOffset + section.adapter.getItemViewType(position-1);   
	        }   
	        position -=size;   
	        typeOffset +=section.adapter.getViewTypeCount();   
	    }       
	    return -1;   
	}   

	public boolean areAllItemsSelectable() {   
	    return false;   
	}   

	public boolean isEnabled(int position) {   
	   // return(getItemViewType(position)!=TYPE_SECTION_HEADER); 
		return false;
	}   

	@Override   
	public View getView(int position, View convertView,ViewGroup parent) {   
	    int sectionIndex=0;   
	    for (Section section : this.sections) {   
	        if (position==0) {   
	            return getHeaderView(section.header, sectionIndex,convertView, parent);   
	        }   

	        int size=section.adapter.getCount()+1;   

	        if (position<size) {   
	            return section.adapter.getView(position-1,  convertView,parent);   
	        }   

	        position-=size;   
	        sectionIndex++;   
	    }   
	       
	    return null;   
	}   

	@Override   
	public long getItemId(int position) {   
	    return position;   
	} 
	
	

	class Section {   
	    String header;   
	    Adapter adapter;   
	       
	    Section(String header, Adapter adapter) {   
	        this.header=header;   
	        this.adapter=adapter;   
	    }   
	} 
	
	
	
	
}



 

